﻿using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wallpaper.Models.Entities;

namespace Wallpaper.Data.Configurations
{
    public class CategoryConfiguration : IEntityTypeConfiguration<Category>
    {
        public void Configure(EntityTypeBuilder<Category> builder)
        {
            builder.ToTable("categories");

            // 配置主键
            builder.HasKey(c => c.Id);
            builder.Property(c => c.Id)
                .HasMaxLength(36)
                .IsRequired()
                .HasComment("分类主键ID");

            // 分类名称配置
            builder.Property(c => c.Name)
                .HasMaxLength(30)
                .IsRequired()
                .HasComment("分类名称");

            // 配置 CategorylUrl
            builder.Property(c => c.CategorylUrl)
                   .IsRequired()
                   .HasMaxLength(500)
                   .HasComment("分类图URL");

            // 配置 IsActive
            builder.Property(c => c.IsEnabled)
                   .IsRequired()
                   .HasDefaultValue(true)
                   .HasComment("是否启用");

            // 排序序号配置
            builder.Property(c => c.Sort)
                .IsRequired()
                .HasDefaultValue(0) // 默认排序为0
                .HasComment("排序序号（数字越小越靠前）");

            // 创建时间配置
            builder.Property(c => c.CreatedAt)
                .IsRequired()
                .HasDefaultValueSql("CURRENT_TIMESTAMP")
                .HasComment("创建时间");

            // 更新时间配置
            builder.Property(c => c.UpdatedAt)
                .IsRequired(false)
                .HasComment("最后更新时间");

            // 添加唯一约束，确保分类名称不重复
            builder.HasIndex(c => c.Name)
                .HasDatabaseName("idx_categories_name")
                .IsUnique();


            // 添加排序索引（用于按排序号查询）
            builder.HasIndex(c => c.Sort)
                .HasDatabaseName("idx_categories_sort");

            // 添加创建时间索引
            builder.HasIndex(c => c.CreatedAt)
                .HasDatabaseName("idx_categories_createdat");
        }
    
    }
}
